From 70bd23537f3cf78f4d17118f5249a4ea93d413a0 Mon Sep 17 00:00:00 2001 From: Thomas Jaeger Date: Tue, 29 Sep 2009 02:20:40 -0400 Subject: [PATCH] Select for DeviceStateNotify Signed-off-by: Thomas Jaeger https://bugzilla.gnome.org/show_bug.cgi?id=588649 --- gdk/x11/gdkinput-x11.c | 21 +++++++++++++++++++++ gdk/x11/gdkinputprivate.h | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gdk/x11/gdkinput-x11.c b/gdk/x11/gdkinput-x11.c index d580fdb38d..93ff40aaa2 100644 --- a/gdk/x11/gdkinput-x11.c +++ b/gdk/x11/gdkinput-x11.c @@ -278,6 +278,7 @@ _gdk_input_common_find_events (GdkDevicePrivate *gdkdev, DeviceMotionNotify (gdkdev->xdevice, gdkdev->motionnotify_type, class); if (class != 0) classes[i++] = class; + DeviceStateNotify (gdkdev->xdevice, gdkdev->devicestatenotify_type, class); if (class != 0) classes[i++] = class; } @@ -699,6 +700,26 @@ _gdk_input_common_other_event (GdkEvent *event, return TRUE; } + if (xevent->type == gdkdev->devicestatenotify_type) + { + int i; + XDeviceStateNotifyEvent *xdse = (XDeviceStateNotifyEvent *)(xevent); + XInputClass *input_class = (XInputClass *)xdse->data; + for (i=0; inum_classes; i++) + { + if (input_class->class == ValuatorClass) + gdk_input_update_axes (gdkdev, gdkdev->info.num_axes, 0, + ((XValuatorState *)input_class)->valuators); + input_class = (XInputClass *)(((char *)input_class)+input_class->length); + } + + GDK_NOTE (EVENTS, + g_print ("device state notify:\t\twindow: %ld device: %ld\n", + xdse->window, + xdse->deviceid)); + + return FALSE; + } if (xevent->type == gdkdev->proximityin_type || xevent->type == gdkdev->proximityout_type) { diff --git a/gdk/x11/gdkinputprivate.h b/gdk/x11/gdkinputprivate.h index f67c8a78e0..1b89230fcf 100644 --- a/gdk/x11/gdkinputprivate.h +++ b/gdk/x11/gdkinputprivate.h @@ -83,7 +83,7 @@ struct _GdkDevicePrivate int buttonpress_type, buttonrelease_type, keypress_type, keyrelease_type, motionnotify_type, proximityin_type, - proximityout_type, changenotify_type; + proximityout_type, changenotify_type, devicestatenotify_type; /* true if we need to select a different set of events, but can't because this is the core pointer */ -- 2.30.2